<?php
/**
 * 注册
 * 
 * @version $Id$
 */

class Module_reg
{
	var $contents = array();

	/**
	 * 构造函数
	 */
	function __construct() {
		
	}

	/**
	 * 默认 action
	 */
	function index() {
		$mobile = isset($_GET['phone']) ? trim($_GET['phone']) : null;
		
		$smarty = loadSmarty();
		$smarty->assign('mobile' , $mobile);

		return $smarty->fetch('reg/index.tpl.php');
	}
	
	/**
	 * 注册数据
	 */
	function doreg() {
		$mobile = isset($_POST['mobile']) ? trim($_POST['mobile']) : null;
		$name = isset($_POST['name']) ? trim($_POST['name']) : null;
		$password = isset($_POST['password']) ? trim($_POST['password']) : null;
		$cpassword = isset($_POST['cpassword']) ? trim($_POST['cpassword']) : null;
		$sex = isset($_POST['sex']) ? intval($_POST['sex']) : 0;
		$invite_mobile = isset($_POST['invite_mobile']) ? trim($_POST['invite_mobile']) : null;
/*		
		// 检查手机号码有效性
		if(empty($mobile) || !preg_match('%^[0-9]{11}$%' , $mobile)) {
			return View::error('没有填写手机号码，或手机号码填写有误');
		}
*/		
		// 检查姓名有效性
		if($name === null || strlen($name) == 0) {
			return View::error('没有填写姓名');
		}
/*
		// 检查密码有效性
		if($password === null || strlen($password) == 0) {
			return View::error('没有填写密码');
		}
		
		// 密码长度校验
		if(strlen($password) > 6) {
			return View::error('密码超过了长度限制，最长是6个数字');
		}
		
		// 密码长度校验
		if(preg_match('%^[0-9]{1-6}$%' , $password)) {
			return View::error('密码必须是纯数字');
		}
*/		
		// 两次输入的密码校验
		if($cpassword !== $password) {
			return View::error('两次输入的密码不一致');
		}
/*		
		// 检查邀请者手机号码有效性
		if(!empty($invite_mobile) && !preg_match('%^[0-9]{11}$%' , $invite_mobile)) {
			return View::error('邀请者手机号码有误');
		}
*/		
		// 如果有邀请，则发送奖品
//		if(!empty($invite_mobile)) {
//			$this->_invite_award(9 , $invite_mobile);
//		}
//		echo 'Success.'; die;
		
		// 判断该号码是否已注册
		$Db = loadDB();
		loadLib('User');
		$result = $Db->getOne("SELECT * FROM `user_baseinfo` WHERE `mobile` = " . $mobile);
		if(!empty($result)) {
			return View::error($mobile . ' 这个号码已注册，如果您忘记了密码，可以使用 <a href="' . SITEURL . '/reg.php?m=reg&amp;a=findpassword">找回密码</a>');
		}
		
		// 写入数据
		$query_data = array(
			'mobile' => $mobile,
			'name' => $name,
			'password' => User::encodePassword( $password ),
			'sex' => $sex,
			'proving' => 0,
		);
		$db_result = $Db->doInsert('user_baseinfo' , $query_data);
		$uin = $Db->getLastId();
		if(empty($uin) || $db_result != __DB_OK) {
			return View::error('系统繁忙，请稍后再试' , 1 , array('sql' => $Db->getLastSql()) );
		}
		
		$time_now = time();
		
	// 写入其他用户数据表
		$query_data = array(
			'uin' => $uin,
			'birth' => 0,
			'city' => 0,
			'homecity' => 0,
			'intro' => '',
			'reg_time' => $time_now,
			'login_time' => 0,
		);
		$db_result = $Db->doInsert('user_extrainfo' , $query_data);
		if($db_result != __DB_OK) {
			$error_sql = $Db->getLastSql();
			$Db->query('DELETE FROM `user_baseinfo` WHERE `uin` = ' . $uin);
			return View::error('系统繁忙，请稍后再试' , 1 , array('sql' => $error_sql) );
		}
	header('Location: ' . SITEURL . '/reg.php');	
		/*
		// 写入其他用户数据表
		$query_data = array(
			'uin' => $uin,
			'gold' => 0,
			'level' => 1,
			'time' => 0,
		);
		$db_result = $Db->doInsert('money' , $query_data);
		if($db_result != __DB_OK) {
			$error_sql = $Db->getLastSql();
			$Db->query('DELETE FROM `user_baseinfo` WHERE `uin` = ' . $uin);
			$Db->query('DELETE FROM `user_extrainfo` WHERE `uin` = ' . $uin);
			return View::error('系统繁忙，请稍后再试' , 1 , array('sql' => $error_sql) );
		}
		*/
		
		// 注册成功，记录登陆信息后跳转
//		$session = loadLib('Session');
//		$skey = $session->addSkey($uin);
		
		$smarty = loadSmarty();
		
		// 重新赋值
//		$smarty->assign('skey' , $session->getSkey());
//		$smarty->assign('uin' , $session->getUin());
/*		
		// 如果有邀请，则发送奖品
		if(!empty($invite_mobile)) {
			$invite_mobile_uin = $this->_invite_award($uin , $invite_mobile);
			if(!empty($invite_mobile_uin)) {
				loadLib('Friend');
				Friend::add($uin , $invite_mobile_uin);
			}
		}
		
*/		
//		return $smarty->fetch('reg/success.tpl.php');
		
	}
	
	
	/**
	 * 注册邀请送钱
	 * @param <int> $uin		当前注册用户，即被邀请者
	 * @param <int> $invite_mobile
	 */
	private function _invite_award($uin , $invite_mobile) {
		// 判断发送邀请者是否已注册社区
		loadLib('User');
		$invite_uin_1_info = User::getByMobile($invite_mobile);
		if(!empty($invite_uin_1_info)) {
			// 记录邀请信息
			loadLib('Invite');
			Invite::add($invite_uin_1_info['uin'] , $uin);

			$invite_uin_1 = $invite_uin_1_info['uin'];
			
			$invite_earn_uins = array();
			
			// 判断今天的邀请者是否已经超过5个，超过5个就不再送了
			$invite_code_1 = $this->_invite_earn( $invite_uin_1 , $uin , 2000 , 5 );
			if( $invite_code_1 === 0) {
				$invite_earn_uins[] = $invite_uin_1;
				
				// 送成功了，再送后面一个
				$invite_uin_2_info = Invite::getInviteUser($invite_uin_1);
				if(!empty($invite_uin_2_info)) {
					$invite_uin_2 = $invite_uin_2_info['uin'];
					$invite_code_2 = $this->_invite_earn( $invite_uin_2 , $invite_uin_1 , 1000 , 5 );
					if( $invite_code_2 === 0) {
						$invite_earn_uins[] = $invite_uin_2;
						
						$invite_uin_3_info = Invite::getInviteUser($invite_uin_2);
						if(!empty($invite_uin_3_info)) {
							$invite_uin_3 = $invite_uin_3_info['uin'];
							$invite_code_3 = $this->_invite_earn( $invite_uin_3 , $invite_uin_2 , 500 , 5 );
							
							if($invite_code_3 === 3) {
								$invite_earn_uins[] = $invite_uin_3;
							}
						}
					}
				}
			}
			
			// 发说说
			if(!empty($invite_earn_uins)) {
				$status_content = '';
				
				if(!empty($invite_uin_1_info)) {
					$status_content .= '感谢' . $invite_uin_1_info['name'] . '的邀请，送你2000个金币；';
					
					$invite_uin_2_info = false;
					if($invite_code_2 === 0 && !empty($invite_uin_2)) {
						$invite_uin_2_info = User::getBaseInfo($invite_uin_2);
					}
					
					if(!empty($invite_uin_2_info)) {
						$status_content .= '感谢' . $invite_uin_1_info['name'] . '的邀请者' . $invite_uin_2_info['name'] . '，送你1000个金币；';
						
						$invite_uin_3_info = false;
						if($invite_code_3 === 0 && !empty($invite_uin_3)) {
							$invite_uin_3_info = User::getBaseInfo($invite_uin_3);
						}
						
						if(!empty($invite_uin_3_info)) {
							$status_content .= '最后感谢' . $invite_uin_2_info['name'] . '的邀请者' . $invite_uin_3_info['name'] . '，送你500个金币；';
						}
					}
					
					$status_content .= '谢谢大家';
				}
				
				if(!empty($status_content)) {
					loadLib('Status');
					Status::add($uin , $status_content);

					loadLib('Feed');
					Feed::addStatus($uin , Status::$last_insert_id , $status_content);
				}
			}
		}
		
		return $invite_uin_1_info['uin'];
	}
	
	
	/**
	 * 内部函数，给发起邀请者送钱
	 * @param <int> $uin	发起邀请者
	 * @param <int> $invite_uin	被邀请者
	 * @param <int> $earn
	 * @param <int> $max_times		最多收钱次数 
	 */
	private function _invite_earn($uin , $invite_uin , $earn , $max_times = 5) {
		loadLib('Invite');
		
		$today_timestamp = strtotime( date('Y-m-d' , isset($_SERVER['REQUEST_TIME']) ? $_SERVER['REQUEST_TIME'] : time() ) );
		$today_timestamp = 0;
		
		// 判断今天的邀请者是否已经超过5个，超过5个就不再送了
		$count = Invite::getTodayEarns($uin , $today_timestamp);
		if($count >= $max_times) {
			return -1;
		}
		
		// 送钱
		loadLib('Money');
		$code = Money::update($uin , $earn);
		
		if($code !== 0) {
			return -1;
		}
		
		// 记录
		$code = Invite::addEarn($uin , $invite_uin , $earn);
		if($code !== 0) {
			return -1;
		}
		
		return 0;
	}
}


# end of script
